# set() 集合  表现形式  set1 = {}
s = {6, 3, 132, "嘿嘿"}
print("打印结果：", s)  # 每次输入元素的排序可能都不一样，这就是特性

s = {6, 3, 132, "嘿嘿", [1]}  # TypeError: unhashable type: 'list'
# PYTHON 的set()集合的数据进行存储的时候需要对数据进行哈希计算，根据算出来的哈希值来存储到计算机的内存中
# set() 集合这个类型本身是不可变的，其中的元素是可以哈希计算的，所以能当元素放到 集合里

s = {6, 3, 132, "嘿嘿", ()}  # 元组是不可变的，可哈希计算的，所以没保存，能存储
s = {6, 3, 132, "嘿嘿", {}}

# 可哈希计算： 不可变的数据类型： int, str, tuple, bool
# 不可哈希计算： 可变的数据类型， list, dict, set
# set集合本身是可变的（不可哈希），但是内部元素要求是不可变的（可哈希的）,,

s = set()
t = tuple()
l = list()
strs = str()

s1 = set()
s1.add("小红")
s1.add("小黄")
s1.add("小蓝")
print(s1)

# s1.pop()    # 数据是无序的，默认弹出最后一个元素可能不稳定 --- 没有索引，没有切片
# print(s1)
#
# s1.remove("小红")    # 用remove 删除指定的元素值
# print(s1)
#
# # 想修改，需要先删除指定的值，在添加指定的值
# s1.remove("小黄")
# s1.add("小黑")
# print(s1)


for item in s1:
    print("for循环输出的结果：", s1)

# 交集 、并集、差集
s1 = {"棕色", "红色", "黄色"}
s2 = {"橙色", "绿色", "黄色"}

print(s1 & s2)  # 交集
print(s1.intersection(s2))  # 交集

print(s1 | s2)  # 并集
print(s1.union(s2))  # 并集

print(s1 - s2)  # 差集
print(s2 - s1)  # 差集
print(s1.difference(s2))  # 差集

# 利用不存在同样元素的特性，可以去除重复元素
s3 = {"周杰伦", "昆凌", "蔡依林", "侯佩岑"}
s3.add("周杰伦")
print(s3)

# 比如接口返回的数据，有很多重复，想去重，直接转换成set，在输出，自动去重了
s3 = ["周杰伦", "昆凌", "蔡依林", "侯佩岑","周杰伦", "昆凌", "蔡依林", "侯佩岑","周杰伦", "昆凌", "蔡依林", "侯佩岑","周杰伦", "昆凌", "蔡依林", "侯佩岑","周杰伦", "昆凌", "蔡依林", "侯佩岑"]
print(set(s3))
print(list(set(s3)))
